package ml.kupin.sso.service.impl;

import com.alibaba.fastjson.JSON;
import ml.kupin.common.jedis.JedisClient;
import ml.kupin.common.utils.KuPinResult;
import ml.kupin.pojo.TbUser;
import ml.kupin.sso.service.TokenService;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;

/**
 * Created by 小柯(Allen Kerr) on 17.5.6 16:43.
 */
@Service
public class TokenServiceImpl implements TokenService {

    @Autowired
    private JedisClient jedisClient;

    @Value("${user_info_prefix}")
    private String user_info_prefix;
    @Value("${user_info_lifetime}")
    private int user_info_lifetime;

    @Override
    public KuPinResult getUserByTokenFromRedis(String token) {
        //根据 token 查询 redis
        String json = jedisClient.get(user_info_prefix + token);
        //如果查询不到数据，返回用户已经过期
        if (StringUtils.isBlank(json))
            return KuPinResult.notOk("请重新登录！");
        //如果查询到数据，说明用户已经登录
        //需要重置 key 的过期时间
        jedisClient.expire(user_info_prefix + token, user_info_lifetime);
        //把 json 数据转换成 TbUser 对象， 然后使用 e3Result 包装并返回
        TbUser user = JSON.parseObject(json, TbUser.class);
        return KuPinResult.ok(user);
    }

    /**
     * 用户注销，从redis中移除与token对应的key
     *
     * @param token
     * @return
     */
    @Override
    public boolean removeTokenFromRedis(String token) {
        Long result = jedisClient.del(user_info_prefix + token);
        if (result > 0)
            return true;
        return false;
    }
}
